#include <iostream>

struct A {
    virtual void f() {
        printf("classA\n");
    }
};

struct B : A {
    void f() override {
        printf("classB\n");
    }
};

int main() {
    static_cast<A&&>(B()).f();  //打印classB, static_cast表达式是将亡值，静态类型为A，动态类型为B，发生多态
    static_cast<A>(B()).f();  //打印classA, static_cast表达式是纯右值，静态类型为A，动态类型为A，未发生多态
}